def add(a,b) :
    return (a + b)
def mul(a,b) :
    return(a*b)
def fn(*a) :
    return(a)
# 在不修改原函数的情况下扩展原函数
def new_add(a,b) :
    print('计算开始执行.....')
    r = add(a,b)
    print('计算结束.....')
    return r
print(new_add(12341234,4132521532))
# 我们创建一个函数，这个函数可以自动帮助我们生产函数
def begin_end(old):
    '''
    用来对其它函数进行扩展，使其它函数在执行前打印开始执行，执行后打印执行结束
    参数 : old 要扩展的函数对象
    '''
    # 创建一个新函数
    def new_function(*args,**kwargs):
        print('开始执行~~~~~~')
        # 调用被扩展的函数
        result = old(*args,**kwargs)
        print('执行结束~~~~~')
        # 返回函数的执行结果
        return result
    return new_function
f = begin_end(fn)
f2 = begin_end(add)
f3 = begin_end(mul)
print(f('我是fn'))
print(f2(1247,41214))
print(f3(729385,2135525))

# 像 begin_end()这种函数我们称它为装饰器
# 开发中用装饰器扩展函数的功能

@begin_end
def say_hello():
    print('大家好~~~~~')

say_hello()
